package cn.wolfocde.wolf2w.redis.util;

import cn.wolfocde.wolf2w.util.Consts;
import lombok.Getter;

/**
 * 枚举类对象是唯一的,不能new 保证Redis的key唯一;方便管理
 * 为什么要用枚举类管理redis的key?
 枚举
 (1).我写了key是前缀是这个名作为枚举的列举的东西,同事就不能起同名了
 (2).方便管理,把Redis中的key放在枚举类里面,开发部同人员可以方便管理.不会搞混,起Redis数据库相同的key名字,
 保证了Redis的key的唯一性.(key不唯一,会覆盖掉数据,造成数据丢失)
 Redis的key多个导致key值不容易处理了.
 */
@Getter //不能有setter在类上,可以在字段使用@setter
public enum RedisKeys {
    //枚举对象
//    枚举实例已经是个对象,同时初始化好字段:前缀了. 不需要再传值了
    //验证码枚举实例
    VERIFY_CODE("VERIFY_CODE",Consts.VERIFY_CODE_VAI_TIME*60L),
    //用户登录对象枚举实例
    USER_LOGIN_TOKEN("USER_LOGIN_TOKEN",Consts.VERIFY_CODE_VAI_TIME*60L);
    private String perfix;
    private Long time;
    private RedisKeys(){

    }
    private RedisKeys(String perfix,Long time){
    this.perfix=perfix;
    this.time=time;
    }

    public  String  join(String ... values) {
        StringBuilder sb = new StringBuilder(80);
        //实例调用方法时,已经初始化好字段perfix和time的值了
        sb.append(perfix);
        //VERIFY_CODE:13949553444
        for (String ele:values) {
            sb.append(":").append(ele);
            //多个参数就拼接出这个效果
            // VERIFY_CODE:13949553444:yyyyyeeeee
        }

        return sb.toString() ;
    }

    public static void main(String[] args) {
        String join = RedisKeys.VERIFY_CODE.join("13949553444","yyyyyeeeee");
        System.out.println(join);
    }
}
